1. システム全体の負荷を監視
$ vmstatprocs ----------memory------ --swap-- --io-- -system- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 0 421300 3344 1592944 0 0 9 4 125 101 0 0 99 0 0 |
項目名 | 意味 |
%usr | アプリケーション(ユーザーレベル) |
r | 実行中または実行待ち」(runnable)のプロセス数 |
b | uninteruptibleなIO待ちのプロセス数(r+bがロードアベレージに等しい) |
swpd | スワップされたメモリ |
free | 空きメモリ。これは小さくてもよい。free+buff+cacheが少なければ問題 |
buff | バッファキャッシュ |
cache | ページキャッシュ |
si | スワップイン |
so | スワップアウト |
bi | ブロックデバイスからの読み込み |
bo | ブロックデバイスへの書き込み |
in | 1秒間の割り込み回数(タイマー含む) |
cs | 1秒間のコンテキストスイッチ回数 |
us | ユーザーCPU時間(カーネル以外が使用したCPU使用率) |
sy | システムCPU時間(カーネルが使用したCPU使用率) |
id | アイドル時間 |
wa | IO待ち時間 |
st | 仮想マシンに盗まれた時間 |
※ メモリの単位はK(キロバイト)。--unit Mでメガバイト単位に変更できる。
【 OOM Killer 】(Out of Memory Killer)
システムが実メモリーと仮想メモリー空間(スワップ領域)を使い切り、必要なメモリー領域を新たに確保できない場合に、プロセスを強制終了させて空きメモリーを確保する、Linuxカーネルの仕組みです。この仕組みをOOM Killerと呼びます。
メモリが不足してシステムが停止する恐れがある際、メモリリソースを多く消費しているプロセスを強制的に停止します。
OOM Killerはシステムのメモリが足りなくなった時に、プロセス毎の優先度やスコアをもとにしてプロセスを停止し、システム全体が停止してしまうことを防ぐための機能です。
# cat /var/log/messages | grep Killed Nov 8 13:22:24 localhost kernel: Killed process 17143 (java), UID 1001, total-vm:7790724kB, anon-rss:4108910kB, file-rss:6822kB, shmem-rss:0kB |
● OOM Killerによるプロセス停止の回避
プロセス毎の優先度は/proc/プロセスID/oom_score_adj、スコアは/proc/プロセスID/oom_scoreで確認できます。
例えば、httpd(Apache HTTP Server)の優先度とスコアは以下のように確認します。以下の例では優先度が0でスコアも計算されており、プロセス停止の対象となりうることが分かります。
$ ps -ef | grep httpd root 1460 1 0 8月11 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND apache 1594 1460 0 8月11 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND |
$ cat /proc/1460/oom_score_adj 0 |
$ cat /proc/1460/oom_score 667 |
優先度を変更するためには、上記パラメータを-1000にセットする必要があります。手動で、もしくはプロセス起動スクリプトで変更する場合は以下のようにセットします(プロセスIDは適宜取得する必要あり)。
# echo -1000 > /proc/1460/oom_score_adj |
systemd(systemctl)を使って起動しているサービスでは、ユニットファイルの[Service]セクションにOOMScoreAdjust=-1000オプションを追記するだけでOKです。例えばhttpdの場合は以下のような感じで設定します。ユニットファイル変更後にはsystemctl daemon-reloadでユニットファイルをリロードしてからサービスを再起動する必要があります。
# systemctl status httpd ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2020-11-07 00:39:14 UTC; 2 days ago ... |
[Service]セクションに追記します。
# vi /usr/lib/systemd/system/httpd.service | ... [Service] ... OOMScoreAdjust=-1000 ... |
hhtpdサービスを再起動します。
# systemctl daemon-reload # systemctl restart httpd |
Icinga2は、Nagiosという監視ツールから派生して開発されたオープンソースの監視ツールです。Icinga2では監視の種類も、pingやhttp、smtp、dns等の基本的なプロトコルや、CPUやメモリ、ディスク容量等のリソース監視など様々な監視を行うことができます。
2.Nagios
Nagiosとは、オープンソースの統合監視ソフトウェアの中でも歴史のある監視ツールです。システムとネットワークの稼働状態を監視する機能を提供します。サーバとネットワーク機器の稼働状態を監視する機能を提供します。異常を検知すると、それを管理者にメールで報告する機能などを備えています。
基本機能は、サーバにPINGを飛ばしての「死活チェック」と、クライアントとしてサーバにアクセスして稼働状況を監視する「アクティブ・チェック」のみです。
Linuxサーバでcollectdを起動すると、定期的にサーバの統計情報を収集してデータベースに保存します。保存されたデータは、collectdに含まれるウェブインタフェース(CGI)を使用して参照することが可能です。収集データはグラフ化して表示されます。
例えば、Linuxサーバの基本的な統計情報では、CPU使用率・ディスクパーティションの使用量・ネットワークインタフェースの通信量・ロードアベレージ・メモリ使用量・スワップ使用量・TCPコネクション数等の統計情報を収集してグラフ化することができます。
MRTGは、SNMPで定期的にポーリングを行い、収集したデータをグラフ化するソフトウェアです。
MRTGは、グラフ部分をPNGフォーマット、付帯情報をHTMLフォーマットで出力します。
情報の取得、グラフ化に特化しており、監視などの機能はありません。データ、設定はすべてテキストファイルで行います。
Cactiは、SNMPを使用し、サーバやネットワーク機器から取得した情報をグラフ化するモニタリング・ツールです。
6.Zabbix
Zabbixは、サーバ、ネットワーク、アプリケーションを集中監視するための統合監視ソフトウェアです。
Zabbixは、状態監視、障害検知、通知機能を備えた監視ツールです。ネットワークの監視に適したSNMPとSNMPトラップに対応していています。また、Zabbixエージェントと呼ばれる独自エージェントを監視対象のサーバにインストールすることにより、詳細なサーバ監視を行うこともできます。そのため、システム全体をZabbixサーバだけで監視することが可能です。
www.it-shikaku.jp